package main
import (
	"fmt"
	"math"
)
/*
1、方法和函数类似，方法是附加在一个特定类型上的函数
2、通过将函数附加到特定类型上，可以在该类型的所有实例方法傻姑娘调用这个方法
*/
type Vertex struct {
	X, Y float64
}
// type MyFloat float64
// //demo1
// func (v Vertex) Abs() float64{
// 	return math.Sqrt(v.X*v.X + v.Y*v.Y)
// }
// //demo2
// func (f MyFloat) Abs() float64 {
// 	if f < 0 {
// 		return float64(-f)
// 	}
// 	return float64(f)
// }

// //demo3
// func (v *Vertex) Scale(f float64){
// // func (v Vertex) Scale(f float64){
// 	v.X = v.X * f
// 	v.Y = v.Y * f
// }
//demo4
func Abs(v Vertex) float64{
	return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func Scale(v *Vertex, f float64){
	v.X = v.X * f
	v.Y = v.Y * f
}

func main(){
	//demo1
	v := Vertex{3, 4}
	// fmt.Println(v.Abs())//5
	// fmt.Println("================demo2")
	// f := MyFloat(math.Sqrt2)//math包定义的浮点数常量，其值等于2的平方根
	// fmt.Println(f.Abs())//1.4142135623730951
	// fmt.Println("================demo3")
	// v.Scale(10)
	// fmt.Println(v.Abs())//50   若将demo3方法中指针去除：5
	fmt.Println("================demo4")
	Scale(&v, 10)
	fmt.Println(Abs(v))
}	